<template>
  <div class="article-manager">
    <pages-header
      ref="pageHeader"
      :title="$route.params.id ? '编辑轮播图' : '添加轮播图'"
      :backUrl="$routeProStr + '/banner/list'"
    ></pages-header>
    <el-card :bordered="false" shadow="never" class="mt16">
      <el-form
        class="form"
        ref="formValidate"
        :model="formValidate"
        :rules="ruleValidate"
        :label-width="labelWidth"
        :label-position="labelPosition"
        @submit.native.prevent
      >
        <div class="goodsTitle acea-row">
          <div class="title">轮播图信息</div>
        </div>
        <div>
          <el-form-item label="轮播图" label-for="image" prop="image">
            <div class="picBox" v-db-click @click="modalPicTap('单选')">
              <div class="pictrue" v-if="formValidate.image">
                <img :src="formValidate.image" />
              </div>
              <div class="upLoad acea-row row-center-wrapper" v-else>
                <i class="el-icon-plus" style="font-size: 24px"></i>
              </div>
            </div>
          </el-form-item>
          <el-form-item label="顺序：" prop="sort" label-for="sort">
            <el-input v-model="formValidate.sort" placeholder="请输入" class="content_width" />
          </el-form-item>
        </div>
        <el-button type="primary" class="submission" v-db-click @click="onsubmit('formValidate')">提交</el-button>
      </el-form>
      <el-dialog :visible.sync="modalPic" width="950px" title="上传图片" :close-on-click-modal="false">
        <uploadPictures
          :isChoice="isChoice"
          @getPic="getPic"
          :gridBtn="gridBtn"
          :gridPic="gridPic"
          v-if="modalPic"
        ></uploadPictures>
      </el-dialog>
    </el-card>
  </div>
</template>

<script>
import { mapState } from 'vuex';
import uploadPictures from '@/components/uploadPictures';
import { setBanner, getBannerDetail } from '@/api/banner';

export default {
  name: 'addBanner',
  components: { uploadPictures },
  data() {
    const validateUpload1 = (rule, value, callback) => {
      if (!this.formValidate.image) {
        callback(new Error('请上传轮播图'));
      } else {
        callback();
      }
    };
    return {
      isChoice: '单选',
      loading: false,
      gridPic: {
        xl: 6,
        lg: 8,
        md: 12,
        sm: 12,
        xs: 12,
      },
      gridBtn: {
        xl: 4,
        lg: 8,
        md: 8,
        sm: 8,
        xs: 8,
      },
      formValidate: {
        id: 0,
        image: '',
        sort: 0,
      },
      ruleValidate: {
        image: [{ required: true, validator: validateUpload1, trigger: 'change' }],
      },
      modalPic: false,
    };
  },
  computed: {
    ...mapState('media', ['isMobile']),
    labelWidth() {
      return this.isMobile ? undefined : '100px';
    },
    labelPosition() {
      return this.isMobile ? 'top' : 'right';
    },
  },
  watch: {
    $route(to, from) {
      if (this.$route.params.id) {
        this.getDetails();
      } else {
        this.formValidate = {
          id: 0,
          image: '',
          sort: 0,
        };
      }
    },
  },
  methods: {
    // 提交数据
    onsubmit(name) {
      this.$refs[name].validate((valid) => {
        if (valid) {
          let data = {
            url: this.formValidate.id ? `banner/banner/${this.formValidate.id}` : 'banner/banner',
            method: this.formValidate.id ? 'put' : 'post',
            datas: this.formValidate,
          };

          setBanner(data)
            .then(async (res) => {
              this.$message.success(res.msg);
              setTimeout(() => {
                this.$router.push({ path: this.$routeProStr + '/banner/list' });
              }, 500);
            })
            .catch((res) => {
              this.$message.error(res.msg);
            });
        } else {
          return false;
        }
      });
    },
    // 详情
    getDetails() {
      getBannerDetail(this.$route.params.id)
        .then(async (res) => {
          let data = res.data;
          this.formValidate = {
            id: data.id,
            image: data.image,
            sort: data.sort,
          };
        })
        .catch((res) => {
          this.loading = false;
          this.$message.error(res.msg);
        });
    },
    // 选择图片
    modalPicTap() {
      this.modalPic = true;
    },
    // 选中图片
    getPic(pc) {
      this.formValidate.image = pc.att_dir;
      this.modalPic = false;
    },
  },
  mounted() {
    if (this.$route.params.id) {
      this.getDetails();
    }
  },
  created() {},
};
</script>
<style scoped lang="scss">
.content_width {
  width: 414px;
}
::v-deep .ivu-form-item-content {
  line-height: unset !important;
}
.picBox {
  display: inline-block;
  cursor: pointer;
}

.form .goodsTitle {
  border-bottom: 1px solid rgba(0, 0, 0, 0.09);
  margin-bottom: 25px;
}

.form .goodsTitle ~ .goodsTitle {
  margin-top: 20px;
}

.form .goodsTitle .title {
  border-bottom: 2px solid var(--prev-color-primary);
  padding: 0 8px 12px 5px;
  color: #000;
  font-size: 14px;
}

.form .goodsTitle .icons {
  font-size: 15px;
  margin-right: 8px;
  color: #999;
}

.form .add {
  font-size: 12px;
  color: var(--prev-color-primary);
  padding: 0 12px;
  cursor: pointer;
}

.form .radio {
  margin-right: 20px;
}

.form .submission {
  width: 10%;
  margin-left: 27px;
}

.form .upLoad {
  width: 58px;
  height: 58px;
  line-height: 58px;
  border: 1px dotted rgba(0, 0, 0, 0.1);
  border-radius: 4px;
  background: rgba(0, 0, 0, 0.02);
}

.form .iconfont {
  color: #898989;
}

.form .pictrue {
  width: 60px;
  height: 60px;
  border: 1px dotted rgba(0, 0, 0, 0.1);
  margin-right: 10px;
}

.form .pictrue img {
  width: 100%;
  height: 100%;
}

.Modals .address {
  width: 90%;
}

.Modals .address .iconfont {
  font-size: 20px;
}
.tip {
  margin-top: 10px;
  color: #bbb;
  font-size: 12px;
}
</style>
